AWS Lake Formationのチュートリアルをやってみた!
前回のブログでAWS Lake Formationを少し触ってみましたが、イマイチ概念がつかめなかったのでこちらのチュートリアルもやってみようと思います。
チュートリアルは2つ用意されているのですが、今回は
- Tutorial: Creating a Data Lake from an AWS CloudTrail Source
をやっていきます。
※個人的にわかりやすい手順にまとめているので、実際のステップと異なる部分がありますが、ご了承ください。
Lakeformationとは?
個人的に押さえておきたいポイントは次の3つです。
- IAMを拡張した独自のアクセスコントロールモデルによるきめ細かなアクセス制御が可能
- AWS Glueの拡張機能(データカタログ、ジョブ、クローラー、ワークフローなどの実態はGlueのそれ)
- AWS Lake Formation自体は無料だが、配下のサービス利用費が発生
Black Beltの資料がとても参考になりました。さらっと目を通しておくと良いでしょう。
事前準備
※ これ以降の作業はAdministratorAccess
権限を持つ管理者としてログインし、実施していきます。
Lake Fromationの設定
Lake Formationを利用する上での基本設定です。
長くなるので今回のブログでは割愛しますが、ドキュメントを参考に設定を済ませておいてください。
CloudTrailの有効化
CloudTrailは、指定されたS3バケットに証跡のログファイルを配信します。
こちらも今回割愛しますが、ドキュメントCloudTrailを有効化してS3へログを吐き出すように設定しておいてください。
IAM Userの作成
Lake Formationを利用するユーザーを作成します。
アクセス権限には最低限のポリシーとして、
- AWS管理ポリシー:
AmazonAthenaFullAccess
- インラインポリシー:
DatalakeUserBasic
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:GetTable", "glue:GetTables", "glue:SearchTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartitions" ], "Resource": "*" } ] }
をアタッチします。
User name/Passwordは後ほど利用するので保管しておいてください。
LakeFormationWorkflowRoleへCloudTrailへのアクセス権限を付与
事前設定で作成済みのLakeFormationWorkflowRole
にCloudTrailへのアクセス権限を付与します。
- ポリシードキュメント
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": ["arn:aws:s3:::<your-s3-cloudtrail-bucket>/*"] } ] }
この時点で、LakeFormationWorkflowRole
には
AWSGlueServiceRole
DatalakeGetCloudTrail
LakeFormationWorkflow
の3つのポリシーがアタッチされているはずです。
データレイク用のS3バケットを作成
Lake Formation内で扱えるデータレイク(S3バケット)は事前に登録する必要があります。 逆に言うと、登録をしないとLake Formation経由でのデータアクセスはできません。
今回はデータレイク用のバケットを新しく作成します。
Lake Formation側にData lake locationsを登録
先ほど作成したS3バケットをLake Formationのデータレイクとして登録します。
コンソールの「Register and ingest」→「Data lake locations」→「Register location」から設定できます。
LakeFormationWorkflowRoleにデータレイクへのアクセス権限を付与
ワークフローのロールLakeFormationWorkflowRole
に、先ほど登録したデータレイクへのアクセス権限を付与します。
コンソールの「Permissions」→「Data locations」→「Grant」から設定できます。
データカタログにデータベースを登録
ここでのデータカタログとデータベースは、実態としてAWS Glueの機能を呼び出しているだけです。
コンソールの「Data catalog」→「Databases」→「Create Database」から設定できます。
データベース名だけ入力して作成を完了します。
LakeFormationWorkflowRoleにデータベースへの操作権限を付与
ややこしくなってきまいしたが、これから作成するワークフローにはデータカタログにメタデータを作成するという処理があります。
そのため、ここではの権限をLakeFormationWorkflowRole
に付与します。
コンソールの「Permissions」→「Data permissions」→「Grant」から設定できます。
Blueprintからワークフローを作成
ようやくワークフローを作成です。
ここで作成するワークフローの実態はAWS Glue Workflowです。
コンソールの「Register and ingest」→「Blueprints」→「Use blueprints」から設定できます。
設定内容は下記を参考にしてください。
- Blueprint type
AWS CloudTrail
- Import source
- CloudTrail name: 対象のCloudTrail
- Start date: 任意
- Import target
- Target database:
lakeformation_cloudtrail
- Target storage location:
s3://-datalake-cloudtrail
- Data format:
Parquet
- Import frequency
Run on demand
- Import options
- Workflow name:
lakeformationcloudtrailtest
- IAM role:
LakeFormationWorkflowRole
- Table prefix:
cloudtrailtest
ワークフローの作成には数分かかります。
ワークフローの実行
ワークフローの作成が完了したら実行してみます。
ワークフローがComplete
になったら、データレイクとして登録したS3バケットをみてみましょう。CloudTrailのログが登録されているかと思います。
ユーザーにSelect権限を付与
序盤で作成したdatalake_user
ユーザーにデータベースlakeformation_cloudtrail
へのSelect権限を付与します。
コンソールの「Permissions」→「Data permissions」→「Grant」から設定できます。
Amazon AthenaからLake Formation経由でクエリを実行
実際にクエリを実行していきます。
datalake_user
ユーザーでログインし直し、Amazon Athenaのベージに遷移してください。
データベースを選択後、該当のテーブルのポップアップメニューからPreviewを選択すると、自動でクエリが作成されます。 こちらを実行して、Select文が実行できることを確認します。
また、Select文以外の操作は権限を付与していないので、エラーになることを確認します。
まとめ
いかがだったでしょうか。
AWS Lake Formationではきめ細かなアクセスコントロールが可能なのですが、そのための権限項目が多く初見ではわかりづらいです。
一度チュートリアルを試してみるとスッキリするかと思います。
以上どなたかの役に立てば幸いです。